Page({
  data: {
    isAuth:false,
    // 照片http路径 
    src:'',
    // 照片Base64格式
    baseSrc:'',
    token:'',
    // 选择获取照片方式 用来决定摄像头是否展示
    type:''
  },
  // 实现过程
  // 1、页面加载调用uploadImage函数，弹窗用户选择拍照或者从相册中选择，将选择方式传给chooseUploadImage函数
  // 2、若选择拍照 
  //    2.1 chooseUploadImage函数执行camera授权
  //    2.2 点击拍照 得到照片地址
  //    2.3 将照片地址转化为base64格式
  //    2.4 调用百度人脸检测api
  //        2.4.1 获取token
  //        2.4.2 调用api得到面龄
  //    2.5 面龄存入缓存 页面跳转给出方案
  // 3、若选择从相册选取 
  //    2.1 chooseImage进行设置，选取相册中照片，得到地址
  //    2.2 将照片地址转化为base64格式
  //    2.3 调用百度人脸检测api
  //        2.3.1 获取token
  //        2.3.2 调用api得到面龄
  //    2.4 面龄存入缓存 页面跳转给出方案
  onLoad(){
    this.uploadImage();
  },
  // 1、授权后 点击拍照 
  takePhoto() {
    var that = this;
      // 1、得到http格式的照片 存到src中
      wx.createCameraContext().takePhoto({
        quality: 'high',
        success: (res) => {
          console.log('camera');
          console.log(res.tempImagePath);
          that.setData({
            // 得到照片的http地址
            src: res.tempImagePath
          })
          // ——————————————————————
          // 2、将图片转为base64格式
          wx.getFileSystemManager().readFile({
            filePath: that.data.src,// 图片地址 本地or网络
            // filePath:await takePhote(),
            encoding: "base64",//转换的格式
            success: res => {
              that.setData({
                baseSrc:res.data//res.data就是转换完图片的base64格式
            })
            // ——————————————————————
            // 3、得到access_token
            wx.request({
              url: 'https://aip.baidubce.com/oauth/2.0/token', 
              method: 'GET',
              data: {
                grant_type: 'client_credentials',
                client_id: 'gmSEfeiU91jKDGLIN8f4ysCB',
                client_secret: 'H0k8obvHUAfHW42VdD3rO7EcLDUMrjET'
              },
              header: {
                'Content-Type': 'application/json' // 默认值
              },
              success(res) {
                that.setData({
                  token: res.data.access_token,//获取到token
                })
                // ——————————————————————
                // 4、向api发请求得到age
                wx.request({
                  url: 'https://aip.baidubce.com/rest/2.0/face/v3/detect'+'?access_token='+res.data['access_token'],
                  method: 'POST',
                  header: {"Content-Type": "application/json"},
                  // 传入的参数，请求以json格式返回
                  data: {
                    "image": that.data.baseSrc,
                    "image_type": "BASE64",
                    "face_field": "age",
                    "face_type": "LIVE"
                  },
                  success(res) {                    
                    wx.setStorage({
                      key: 'age',
                      data: res.data.result.face_list[0].age
                    })
                    wx.navigateTo({
                      url: '../result/result'
                    })
                  }
              })
              }
           })
            }
          })
        }
      })    
  },
  // 1、弹出照片获取方式框
  uploadImage(e){
    var vm = this;
    wx.showActionSheet({
      // 按钮文字数组
      itemList: ['从相册中选择', '拍照'],
      success: function(res) {
        // tapIndex用户点击文字数组序列号
        if (res.tapIndex == 0) {
          vm.chooseUploadImage('album')
        } else if (res.tapIndex == 1) {
          vm.chooseUploadImage('camera')
        }
      },
      fail: function(res) {
        console.log(res.errMsg)
      }
    })
  },
//  2、根据弹出的选择 通过不同方式获取照片
  chooseUploadImage(type){
    let that = this;
    that.setData({
      type:type
    })
  //  console.log(type);
  // 3、从相册中选取
   if(type=='album'){
    wx.chooseImage({
      count: 1,
      sizeType: ['compressed'],
      // sourceType: [type],
      sourceType: 'album',
      success (res) {
        console.log('album');
        // console.log(res);
        // console.log(res.tempFilePaths[0]);
        that.setData({
         // 得到照片的http地址
         src: res.tempFilePaths[0]
       })
      //  转为base64格式 进行后续处理 同takePhoto中代码
      // 2、将图片转为base64格式
      wx.getFileSystemManager().readFile({
        filePath: that.data.src,// 图片地址 本地or网络
        // filePath:await takePhote(),
        encoding: "base64",//转换的格式
        success: res => {
          console.log('base64');
          // console.log(res);
          that.setData({
            baseSrc:res.data//res.data就是转换完图片的base64格式
        })
        // ————————————————————————
        // 3、得到access_token
        wx.request({
          url: 'https://aip.baidubce.com/oauth/2.0/token', 
          method: 'GET',
          data: {
            grant_type: 'client_credentials',
            client_id: 'gmSEfeiU91jKDGLIN8f4ysCB',
            client_secret: 'H0k8obvHUAfHW42VdD3rO7EcLDUMrjET'
          },
          header: {
            'Content-Type': 'application/json' // 默认值
          },
          success(res) {
            that.setData({
              token: res.data.access_token,//获取到token
            })
            // ——————————————————————
            // 4、向api发请求得到age
            wx.request({
              url: 'https://aip.baidubce.com/rest/2.0/face/v3/detect'+'?access_token='+res.data['access_token'],
              method: 'POST',
              header: {"Content-Type": "application/json"},
              // 传入的参数，请求以json格式返回
              data: {
                "image": that.data.baseSrc,
                "image_type": "BASE64",
                "face_field": "age",
                "face_type": "LIVE"
              },
              success(res) {                    
                wx.setStorage({
                  key: 'age',
                  data: res.data.result.face_list[0].age
                })
                wx.navigateTo({
                  url: '../result/result'
                })
              }
          })
          }
       })
        },
        fail: function() {
          console.log('base64 fail');
        }
      })
      }
    }) 
   }else{
    // 3、拍照
    // 判断相机是否授权，授权状态保存在本地缓存
    // 查看摄像头是否授权
    wx.getSetting({
      success: (res) => {
        // 已授权摄像头
       if(res.authSetting['scope.camera']){
          that.setData({
            isAuth:true
          })
          // 调用takePhoto
       }else{
        // 未授权摄像头
        //发起授权请求 弹窗询问  授权后不论允许或拒绝都不会再弹窗 需要清除缓存
          wx.authorize({
            scope:'scope.camera',
            success(){
             console.log('授权成功');
              that.setData({
                isAuth:true
              })
            },
            fail(){
              console.log('授权失败');
              wx.showToast({
                title: '请先授权摄像头',
                duration: 2000,
                icon:'none'
              })
            }
          })
        }
      }
    });
   }
  }
})
